package cluster

import (
	"fmt"
	"go-zookeeper-demo/app/common"
	"go-zookeeper-demo/app/zookeeper"
)

func welcome() {
	fmt.Println("=========================================")
	fmt.Println("=                                  		=")
	fmt.Println("=       Welcome to go-zookeeper-demo    =")
	fmt.Println("=                                 		=")
	fmt.Println("=========================================")
}
// bootstrap 引导文件

// 首先指向init进行初始化
func init() {
	//
	welcome()
	// 初始化数据
	initData()
	// 初始化集群
	InitCluster()
	// 初始化任务
	InitTask()
	// 初始化集群结点
	InitNodes()
	// 初始化节点
	InitNode()
	// 初始化任务
	InitNodeTask()
}

func initData() {
	common.ConfigNew("app")

	common.LogNew()

	zookeeper.New()
}

// Run 集群开始执行
// 必须要在集群成功启动没有问题后，才能启动其他服务
// 1.cluster
// 2.http
func Run() {
	// leader选举
	nodes.LeaderElection()

	// 节点监听
	go NodesWatch()

	// 任务监听
	go TaskWatch()

	// 节点任务监听
	go NodeTaskWatch()

	// 开始工作
	nodes.DoWork()

	// 定时处理任务，防止监听未收到通知的问题
	worker.doWorkTicker()

	for {
		// 保持程序运行，不退出
	}
}
